package com.itheima.a08regexdemo;

public class RegexDemo3 {
    public static void main(String[] args) {
        //使用正则表达式完成下面的要求

        //用户名的要求：大小写字母，数字，下划线一共4-16位
        String regex1 = "\\w{4,16}";
        System.out.println("zhangsan".matches(regex1));
        System.out.println("lisi".matches(regex1));

        System.out.println("-------------------------");
        //简单校验
        //身份证号码的检验：前17为任意数字后一位可以是数组 或者是X再或者x
        String regex2 = "[1-9]\\d{16}(\\d|x|X)";
        String regex3 = "[1-9]\\d{16}[\\dXx]";
        String regex4 = "[1-9]\\d{16}[\\d(?i)x]";

        System.out.println("220381200504192619".matches(regex4));
        System.out.println("41080119930228457x".matches(regex4));

        System.out.println("----------------------");
        //忽略大小写的写法
        String regex = "a((?i)b)c";
        System.out.println("abc".matches(regex));//true
        System.out.println("aBc".matches(regex));//true
        System.out.println("Abc".matches(regex));//false


        //身份证号码的严格校验
        //将正确的数据进行拆分
        //然后分别去写出来
        //最后从左到右进行拼接

        //前面6位：省份，市区，派出所等信息  第一位不能是0，后面5位是任意数字  [1-9]\\d{5}
        //年的前半段 18 19 20                                   (18|19|20)
        //年的后半段 两位任意数字                                 \\d{2}

        //月份 01到09  10 11 12                              (0[1-9]|1[0-2])
        //日期 01到31之间                                    (0[1-9]|[12]\\d|3[01])
        // 后面四位：可以是3位数字+大写或者小写的x  或者是四位有效数字 (\\d{3}(?i)x|\\d{4})
        String regex6 = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])(\\d{3}(?i)x|\\d{4})";
        System.out.println("-----------------------");
        System.out.println("220381200504192619".matches(regex6));
        System.out.println("41080119930228457x".matches(regex6));
    }
}
